iT邦幫忙

2022 iThome 鐵人賽

DAY 7
2
DevOps

30天準備CKA考試系列 第 7

Day 07:Service

  • 分享至 

  • xImage
  •  

Day 07:Service

我認知的Service是定義各個Pods之間是如何溝通的規則,類似Docker的Network。而它的主要方式就是類似ReplicationController一樣,透過selector來根據Pod的label,使得符合條件的Pod會自動建立Endpoints來配對到這個Service。

而Service主要分為三種類型:

  • ClusterIP:在集群中產生一個Virtual IP,如果不指定的話,這個IP只能在集群內部訪問。ClusterIP會讓Pod的某個Port對應到這個Virtual IP的某個Port,在YAML中前著為targetPort,而後者為port。這樣如果其他Pod想要訪問這個被Service所綁定的Pod,就可以直接透過這個這個Virtual IP的port來訪問。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: ClusterIP
      selector:
        app.kubernetes.io/name: MyApp
      ports:
        - port: 8080 # ClusterIP的Port
          targetPort: 80 # Pod的Port
    
  • NodePort:將前面ClusterIP的Port映射到某個Port,後面這個Port預設會在所有Nodes上暴露出來,我們稱其為nodePort,另外nodePort的預設範圍會在30000-32767之間。如果不指定的話,會在此範圍中選一個分配給你。

    Pod(targetPort: 80) ⇒ Service(port: 8080) ⇒ Nodes(nodePort: 30007)

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: NodePort
      selector:
        app.kubernetes.io/name: MyApp
      ports:
        - port: 8080
          targetPort: 80
          nodePort: 30007
    

    此外,如果再spec.externalTrafficPolicy設置Local,那nodePort就會限制在那個Pod所在的節點才能訪問。

  • LoadBalancer:主要是在使用公有雲的LoadBalancer做搭配時會用到,像是AWS的ELB之類的,而這些公有雲都會有自己的設定方式。如果是在地端的話,設置LoadBalancer的效果是與NodePort相同的。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app.kubernetes.io/name: MyApp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
      clusterIP: 10.0.171.239
      type: LoadBalancer
    

參考資料

Service


上一篇
Day 06:Deployments
下一篇
Day 08:Scheduling
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言